#include <iostream>
#include <fstream>
#include <assert.h>
#include <cstdlib>
#include <cstring>

// Notar que el bloque tendrá un tamaño de: 4bytes + STRING_MAX_SIZE bytes.
#define STRING_MAX_SIZE 30
#define BLOCK_SIZE sizeof(int)+STRING_MAX_SIZE
#define FIELDS_TOKEN " "

using namespace std;

int main( int argc, char* argv[] )
{

    if ( argc != 3 )
    {
        cerr<<"Argumentos inválidos. Uso: bin2text [inputfile] [outputfile]."<<endl;
        return 1;
    }

    ifstream infile( argv[1] );
    ofstream outfile( argv[2] );
    
    char buffer[BLOCK_SIZE];
    char *word;
    unsigned int random;

    // Cargo el buffer
    while ( infile.read( buffer, BLOCK_SIZE ) )
    {

        // Extraigo el nº random
        random = *( (unsigned int*)buffer );
        
        // Extraigo la palabra
        word = buffer + sizeof( int );
        
        // Escribo los datos en el archivo de salida
        outfile << random << FIELDS_TOKEN << word << endl;

    }

    infile.close();
    outfile.close();
    return 0;
    
}
